home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Found / ODUtils / MemMgr.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-17  |  4.1 KB  |  139 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        MemMgr.h
  3.  
  4.     Contains:    Procedural API for memory heaps
  5.  
  6.     Owned by:    Jens Alfke
  7.  
  8.     Copyright:    © 1994 - 1996 by Apple Computer, Inc., all rights reserved.
  9.         
  10.     Change History (most recent first):
  11.  
  12.          <2>     6/19/96    jpa        1357406: Added MMOverridePlatform et al
  13.  
  14. */
  15.  
  16.  
  17. #ifndef _MEMMGR_
  18. #define _MEMMGR_
  19. #pragma once
  20.  
  21. #include <stdlib.h>        // For size_t
  22.  
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. #pragma lib_export on
  28.  
  29.  
  30. //========================================================================================
  31. // Data types
  32. //========================================================================================
  33.  
  34. typedef char MMBoolean;
  35.  
  36. typedef void* MMBlock;
  37. typedef const void* ConstMMBlock;
  38. typedef void* MMHandle;            // Handles are opaque as in Windows
  39.  
  40. typedef struct MemHeap MemHeap;                    // An opqaue data type
  41.  
  42. typedef enum MMHeapLocation {
  43.     kMMSysMemory,        // Shared system memory, persistent between processes
  44.     kMMAppMemory,        // Process's local memory heap
  45.     kMMTempMemory        // Local process mem outside its heap; may make sense only on Mac
  46. } MMHeapLocation;
  47.  
  48.  
  49. //========================================================================================
  50. // Configuration
  51. //========================================================================================
  52.  
  53. enum{
  54.     kMMDebugConfigMask = 1                // Mask bit for return value from MMConfiguration
  55. };
  56.  
  57. long    MMConfiguration( );
  58.  
  59. //========================================================================================
  60. // Heap management
  61. //========================================================================================
  62.  
  63. MemHeap*    MMNewHeap( MMHeapLocation, size_t initialSize, size_t growBy,
  64.                     const char *name );
  65. void        MMDisposeHeap( MemHeap* );
  66.  
  67. MemHeap*    MMGetDefaultHeap( );
  68. MemHeap*    MMSetDefaultHeap( MemHeap* );                // Returns old default
  69.  
  70. void        MMOverridePlatform   ( MMBoolean ptrs, MMBoolean handles );
  71. void        MMEndOverridePlatform( MMBoolean ptrs, MMBoolean handles );
  72. void        MMOverridingPlatform ( MMBoolean*ptrs, MMBoolean*handles );
  73.  
  74. //========================================================================================
  75. // Free space management
  76. //========================================================================================
  77.  
  78. void        MMGetFreeSpace( MemHeap*, size_t *total, size_t *contig );
  79.  
  80. void        MMSystemFreeSpace( MMHeapLocation, size_t *total, size_t *contig );
  81.                 // Total free space in that area of RAM, _not_ MM heap free space.
  82.  
  83. MMBoolean    MMAllocateSlushFund( MemHeap*, size_t size, size_t allocSizeLimit );
  84. size_t        MMSlushFundSize( MemHeap* );                // zero if none
  85. size_t        MMFreeSlushFund( MemHeap* );                // returns size freed
  86.  
  87.  
  88. //========================================================================================
  89. // Operations on pointer based blocks
  90. //========================================================================================
  91.  
  92. MMBlock        MMAllocate( size_t size );
  93. MMBlock        MMAllocateClear( size_t size );
  94.  
  95. MMBlock        MMAllocateIn( size_t size, MemHeap* );
  96. MMBlock        MMAllocateClearIn( size_t size, MemHeap* );
  97.  
  98. MMBlock        MMReallocate( MMBlock, size_t size );
  99. MMBlock        MMSplice( MMBlock, size_t offset, long delta );
  100. void        MMFree( MMBlock );
  101.  
  102. size_t        MMBlockSize( ConstMMBlock );
  103. MemHeap*    MMGetHeap( ConstMMBlock );
  104.  
  105. void        MMSetIsObject( MMBlock, MMBoolean isObject );
  106. MMBoolean    MMIsObject( ConstMMBlock );
  107.  
  108.  
  109. //========================================================================================
  110. // Operations on relocatable blocks (handles)
  111. //========================================================================================
  112.  
  113. MMHandle    MMAllocateHandle( size_t );
  114. MMHandle    MMAllocateHandleIn( size_t, MMHeapLocation );
  115. void        MMFreeHandle( MMHandle );
  116. MMHandle    MMCopyHandle (MMHandle );
  117.  
  118. size_t        MMGetHandleSize( MMHandle );
  119. MMBoolean    MMSetHandleSize( MMHandle, size_t );
  120.  
  121. void*        MMLockHandle( MMHandle );
  122. void        MMUnlockPtr( void* ptr );
  123. void        MMUnlockHandle( MMHandle );
  124.  
  125. //========================================================================================
  126. // Moving memory in general
  127. //========================================================================================
  128.  
  129. void        MMMove( void *dst, const void *src, size_t size );
  130.  
  131.  
  132. #pragma lib_export off
  133.  
  134. #ifdef __cplusplus
  135. }
  136. #endif
  137.  
  138.  
  139. #endif /*_MEMMGR_*/